﻿var opts = null;
var del = "del";
var pageAjax = false;

//初始化选项卡
function initTab() {
    $("ul.swUl li").click(function() {
        $(this).siblings("li").removeClass("on");
        $(this).addClass("on");
        $(this).parent().siblings("div.swDiv").hide();
        $(this).parent().siblings("div.swDiv:eq(" + $(this).parent("ul.swUl").children("li").index($(this)) + ")").show();
    });
}

//从url中获取一个get值
function getParam(url, name) {
    url = url.substring(url.indexOf('?') + 1);
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");   
    var r = url.match(reg);
    if (r) return unescape(r[2]);
    return null;
}

//表单提交
function submit(form, action, type, callback) {
    action = action || location.href;
    type = type || 'get';
    $.ajax({
        type: type,
        url: action,
        dataType: 'json',
        data: $(form).serialize(),
        cache: false,
        beforeSend: function() {
            $(form + " :input").attr("disabled", "true");
        },
        success: function(res) {
            $(form + " :input").attr("disabled", "");
            //document.forms[form.replace('#','')].reset();
            if (callback) callback(res);
        },
        error: function(res) {
            alert('服务器错误，请联系管理员。'+res);
            $(form + " :input").attr("disabled", "");
        }
    });
}
function fillResult(expr, result) {
    if (!result || result.Message.length == 0)
        return "";
    var val = "";
    var success = false;
    switch (result.Type) {
        case 0:
            val = "<ul class=\"Success\">";
            success = true;
            break;
        case 1:
            val = "<ul class=\"Error\">";
            break;
        case 2:
            val = "<ul class=\"Information\">";
            break;
    }
    for (var i = 0; i < result.Message.length; i++) {
        val += "<li>" + result.Message[i] + "</li>";
    }
    val += "</ul>";
    $(expr).html(val);
    return success;
}

//删除
function del(action, callback) {
    $.ajax({
        type: 'post',
        url: action,
        dataType: 'json',       
        cache: false,       
        success: function(res) {
            if (callback) callback(res);           
        }
    });
}

$(function () {
    //表单效果
    $("input[type='text'],input[type='password'],textarea").addClass("inputBox")
        .focus(function () { $(this).addClass("focus"); })
        .blur(function () { $(this).removeClass("focus"); });

    var validator;

    if (opts != undefined || opts != null) {
        validator = $("form.auto").validate(opts);
    }
    $("form.auto").submit(function () {

        if (validator != undefined && validator != null) {
            if (!validator.form())
                return false;
        }

        var me = $(this);
        var name = me.attr("id");
        var reUrl = me.attr("reUrl");
        submit('#' + name, me.attr("action"), me.attr("method"), function (res) {
            if (fillResult("#" + name + "Result", res)) {
                eval('if(typeof ' + name + 'Success != "undefined") ' + name + 'Success()');
                if (reUrl) setTimeout("location.href = '" + reUrl + "'", 1000);
            }
        });

        return false;

    });

    $("a." + del).click(function () {
        if (confirm("确认删除？")) {
            var id = getParam($(this).attr("href"), "ID");
            del($(this).attr("href"), function (result) {
                if (result.Type == 0)
                    $("#tr" + id).remove();
            });
        }
        return false;
    });

    $("table.list tr").hover(
        function () { $(this).addClass("alt") },
        function () { $(this).removeClass("alt") }
    )

    if (pageAjax) {
        InintLoad();
        InintAjaxPage();
    }

});
function BindResult(result) {
    if (!result)
        return;
    if (result.Error != "") { alert(result.Error); }
    else {
        $('#list').html(result.Message);
        $('#pages').html(result.Pageing);
    }
}
//首次加载
function InintLoad() {
    var href = location.href;
    $.ajax({
        type: 'get',
        url: href,
        dataType: 'json',
        cache: false,
        beforeSend: function () { showLoading(); },
        success: function (result) { BindResult(result); },
        //error: function (res) { alert('翻页错误，请联系管理员。' + res); },
        complete: function () { closeDivDialog(); InintAjaxPage(); }
    });
}
//绑定翻页
function InintAjaxPage() {
    $("#pages a").click(function () {
        var href = $(this).attr("href");
        $.ajax({
            type: 'get',
            url: href,
            dataType: 'json',
            cache: false,
            beforeSend: function () { showLoading(); },
            success: function (result) { BindResult(result); },
            //error: function (res) { alert('翻页错误，请联系管理员。' + res); },
            complete: function () { closeDivDialog(); InintAjaxPage(); }
        });
        return false;
    });
}


/*
为元素添加绑定事件

obj ：被操作的元素
type ：事件名称
fn ：绑定的函数
第一行：var func = obj['on'+type] || function() {};其功能是保存之前已绑定的事件。或是第1次绑定，则返回一个空函数。目的是方便下面的调用。
第二行：obj['on'+type] = function(event) {}：重新定义obj['on'+type]事件（在原事件的基础上再多执行一个fn函数，你肯定知道n += 3！！！！）
第三行：event = event || window.event ：不要解释吧（修复event，因为IE把事件对象放入了window.event之中）
第四行：func.call(obj, event)：先执行以前被绑定的函数（第1次绑定时，这里为一个空函数），使用call的方式来确保func内的this为元素。
第五行：fn.call(obj, event) ：再执行本次绑定的函数，同样使用call的方式来确保fn内的this为元素。
第四、五行就实现在原有的基础上再多执行一个函数，这样顺序肯定是保持绑定时的顺序的。
*/
function addEvent(obj, type, fn) {
    var func = obj['on' + type] || function () { };
    obj['on' + type] = function (event) {
        event = event || window.event;
        func.call(obj, event);
        fn.call(obj, event);
    }
}